package com.jsbs.iam.user.service;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.user.dto.*;
import com.jsbs.iam.user.entity.*;

import java.net.URISyntaxException;
import java.util.List;

/**
 * @BelongsProject: iam
 * @BelongsPackage: com.jsbs.iam.user.service
 * @Author: WangJiYuan
 * @Description: TODO
 * @Version: 2022-12-02  17:35
 */
public interface OrgTypeService {
    /**
     * 新增组织类型
     * @param orgTypeAddDto
     */
    void addOrgType(OrgTypeAddDto orgTypeAddDto);

    /**
     * 根据组织类型获取组织类型下组织数量
     *
     * @param orgTypeCode
     * @param companyCode
     * @return
     */
    int selectOrgCount(String orgTypeCode, String companyCode);

    /**
     * 根据组织类型获取用户数量
     *
     * @param orgTypeCode
     * @param companyCode
     * @return
     */
    int selectOrgUserCount(String orgTypeCode, String companyCode);

    /**
     * 根据组织类型获取组织数据
     *
     * @param orgTypeCode
     * @param companyCode
     * @return
     */
    List<IamOrgFramework> selectOrgInfo(String orgTypeCode, String companyCode);

    /**
     * 新增组织类型字段
     * @param orgTypeFieldAddDto
     */
    void addOrgTypeField(OrgTypeFieldAddDto orgTypeFieldAddDto);

    /**
     * 修改字段
     * @param orgTypeFieldUpdateDto
     */
    void updateOrgTypeField(OrgTypeFieldUpdateDto orgTypeFieldUpdateDto);

    /**
     * 删除组织类型字段(批量)
     * @param orgTypeFieldUpdateDto
     */
    void deleteOrgTypeField(OrgTypeFieldUpdateDto orgTypeFieldUpdateDto);

    /**
     * 查询对应组织类型下所有字段(分页)
     * @param orgTypeFieldSelectDto
     * @return
     */
    PageInfo selectOrgTypeFieldList(OrgTypeFieldSelectDto orgTypeFieldSelectDto);

    /**
     * 复制字段
     * @param orgTypeFieldUpdateDto
     */
    void copyOrgTypeField(OrgTypeFieldUpdateDto orgTypeFieldUpdateDto);

    /**
     * 查询组织类型数据
     *
     * @param companyCode
     * @param userCode
     * @param adminRoleCode
     * @return
     */
    List<IamOrganizationTypeBase> getOrgTypeData(String companyCode, String userCode, String adminRoleCode);

    /**
     * 根据组织类型编码逻辑删除组织类型
     * @param deleteDto
     */
    void deleteOrgType(OrgTypeDeleteDto deleteDto) throws URISyntaxException;

    /**
     * 校验组织类型名称是否唯一
     *
     * @param orgTypeName
     * @param companyCode
     * @return
     */
    int checkTypeName(String orgTypeName, String companyCode);

    /**
     * 校验输入的组织类型编码是否唯一
     *
     * @param orgTypeCode
     * @param companyCode
     * @return
     */
    int checkTypeCode(String orgTypeCode, String companyCode);
}
